// ------------------------------------------------------------------------------------------------------------------------
// Plemiona.pl 5.X Skrypt użytkowy
//
// Nazwa:      Przechodzenie między niepełnymi zagrodami
// Wersja:     1.8
// Autor:      Lukasz032 (Plemiona Ś7)
// Dostosował: Lukasz032 (Plemiona Ś7)
//
// Tagi specjakne:
// Licencja:   Creative Commons Uznanie autorstwa - Brak komercyjnego zastosowania - Na tych samych warunkach 2.0 Polska
// Informacje: http://creativecommons.org/licenses/by-nc-sa/2.0/pl
// Support:    lvwnbrz@lykamspam.pl
//
// ------------------------------------------------------------------------------------------------------------------------
// ==UserScript==
// @name           Przechodzenie między niepełnymi zagrodami
// @namespace      http://code.google.com/p/plemiona-skrypty/
// @description    Przechodzenie między niepełnymi zagrodami
// @version        1.8
// @license        Creative Commons 2.0 BY-NC-SA (http://creativecommons.org/licenses/by-nc-sa/2.0/pl)
// @author         Lukasz032 (Plemiona Ś7)
// @include        http://pl*.plemiona.pl/game.php*
// ==/UserScript==
// ------------------------------------------------------------------------------------------------------------------------

//
// Kompatybilność z IE, czyli funkcja pobierająca klasy....
//
function getElementsByClass(searchClass,node,tag) {
var classElements = new Array();
if ( node == null )
node = document;
if ( tag == null )
tag = '*';
var els = node.getElementsByTagName(tag);
var elsLen = els.length;
var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
for (i = 0, j = 0; i < elsLen; i++) {
if ( pattern.test(els[i].className) ) {
classElements[j] = els[i];
j++;
}
}
return classElements;
}

if ((typeof unsafeWindow) == "undefined") {
  unsafeWindow = window;
}

// 
// Funkcje zapisu i odczytu ustawień
// GMS-To-Cookies-Elementary-2 by Staemmes-Anonim (Modyfikacja by Nexces & Lukasz032)
//
function save_params(cookieValue) {
 var today = new Date();
 var expire = new Date();
 var nDays = 4;
 if (nDays==null || nDays==0) nDays=4;
 expire.setTime(today.getTime() + 3600000*24*nDays);
 document.cookie = "UnzagroddedVillages"+"="+escape(cookieValue)
                 + ";expires="+expire.toGMTString();
}

function load_params() {
	eval('var reg = /'+"UnzagroddedVillages"+'=(.*?)(?:;|$)/;');
		var value = document.cookie.match(reg);
		if (value) {
			var ret;
			switch (unescape(value[1])) {
				case 'true':
					ret = true;
					break;
				case 'false':
					ret = false;
					break;
				default:
					ret = unescape(value[1]);
			}
			return ret;
		}
};

//
// Detekcja Konta Premium (tutaj na bank konieczna, bez tego są błędy....)
//
function getGameDoc() {
  	getdoc=window.document;
  	if(!getdoc.URL.match("game.php")){
  		for(zeilenNummer=0;zeilenNummer<window.frames.length;zeilenNummer++){
  			if(window.frames[zeilenNummer].document.URL.match("game.php")){
  				getdoc = window.frames[zeilenNummer].document;
	  		}
  		}
  	}
  	return getdoc;
}
var PA = false;
doc = getGameDoc();
try {
var tables = doc.getElementsByTagName('table');
     for (var i=0; i<tables.length; i++) {
        if (tables[i].rows[0].id == 'menu_row2' && tables[i].rows[0].cells.length == 5 && tables[i].rows[0].cells[4].innerHTML.match(/villages.png/)) {
          PA = true;
        } else if (doc.getElementsByTagName("ul")[0].className=="menu nowrap quickbar") {
          PA = true;
        } else {
          PA = false;
        }
      }
} catch (evt) {};

//
// No i zaczynamy z właściwym kodem:
//
function parser_przegladu() {
 if ((document.URL.match(/screen=overview_villages/)) && (!document.URL.match(/mode=(?:prod){0}/))) {
  var lista = "";
  var vis_t_prep = getElementsByClass("vis", doc); //$('ds_body').getElements('.vis');
  var vlgtable = vis_t_prep[0];
  var villages = vlgtable.getElementsByTagName("tr");
  for (a = 0; a < villages.length - 1; a++) {
//    alert(villages.length);
    if (a != 0) {
      var zagroda = villages[a].getElementsByTagName("td")[4].innerHTML;
//      alert(zagroda);
      var pojemnosc = zagroda.split("/");
      var zapelnienie = pojemnosc[0] / pojemnosc[1];
      if (zapelnienie < 0.90) {
        var pid = villages[a].getElementsByTagName("a")[0].getAttribute("href");
        var id = pid.match(/village=(\d+)/)[1];
        lista = lista + id + ","
      };
    };
  } 
//  alert(lista);
  save_params(lista);
 }
};

unsafeWindow.podmieniacz_linkow = function podmieniacz_linkow() {
  var swiat = document.URL.match(/pl(\d{0,2})\.plemiona\.pl/)[1];
  var doc = getGameDoc();  
  var arrows_container = document.getElementById("menu_row2");
  var current_village_url = arrows_container.getElementsByTagName("td")[3].getElementsByTagName("a")[0].getAttribute("href");
  var current_village = current_village_url.match(/village=(\d+)/)[1];
  if (arrows_container.getElementsByTagName("td")[2].innerHTML != "") {
    var link1 = $$(".no_hover")[0].getElementsByTagName("a")[0];
    var link2 = $$(".no_hover")[0].getElementsByTagName("a")[1];
    var village_list = load_params();
    var position = false;
    villages = village_list.split(",");
    for (a = 0; a < villages.length; a++) {
      if (current_village == villages[a]) {position = a;};
    }
    if (position === false) {
      var link1_newtarget = villages[0];
      var link2_newtarget = villages[villages.length - 1];
    } else {
      if (position === 0) {var link1_newtarget = null;} else {var link1_newtarget = villages[position - 1];}
      if (position == villages.length-1) {var link2_newtarget = null;} else {var link2_newtarget = villages[position + 1];}
    };
    var link_screen = link1.getAttribute("href").match(/screen=([a-zA-Z]{0,10})&?/)[1];
    if (link1.getAttribute("href").match(/mode=/)) {var link_mode = "&mode=" + link1.getAttribute("href").match(/mode=([a-zA-Z]{0,10})&?/)[1];} else {var link_mode = "";}
    if (link1_newtarget === null) {
      var link1_newplace = "javascript:alert(\"Pierwsza lub ostatnia wioska z listy filtracyjnej została osiągnięta.\r\nZostaniesz teraz przeniesiony do strony przeglądu wiosek.\");javascript:window.location = \"http://pl" + swiat + ".plemiona.pl/staemme.php?screen=overview_villages\";";
    } else {
      var link1_newplace = "/game.php?village=" + link1_newtarget + "&screen=" + link_screen + link_mode;
    }
    if (link2_newtarget === null) {
      var link2_newplace = "javascript:alert(\"Pierwsza lub ostatnia wioska z listy filtracyjnej została osiągnięta.\r\nZostaniesz teraz przeniesiony do strony przeglądu wiosek.\");javascript:window.location = \"http://pl" + swiat + ".plemiona.pl/staemme.php?screen=overview_villages\";";
    } else {
      var link2_newplace = "/game.php?village=" + link2_newtarget + "&screen=" + link_screen + link_mode;
    }
    $$(".no_hover")[0].getElementsByTagName("a")[0].href = link1_newplace;
    $$(".no_hover")[0].getElementsByTagName("a")[1].href = link2_newplace;
  }
};

//
// Uruchomienie skryptów. Zachodzi tylko wtedy, gdy MooTools jest gotowy do użycia.
//
parser_przegladu();
if (PA) {
 if ((typeof $$) != "function") {
   unsafeWindow.MooToolsWaiting = window.setInterval("if ((typeof $$) == 'function') {clearInterval(MooToolsWaiting);podmieniacz_linkow();}", 600);
 } else {
  unsafeWindow.podmieniacz_linkow();
 }
};
